package club.dmyang.service;

import club.dmyang.entity.Article;
import club.dmyang.entity.ArticleWithBLOBs;
import club.dmyang.entity.Tag;

import java.util.List;

/**
 * Created by brss on 2018/7/14.
 */
public interface ArticleService {

    /**
     * 查询表中category_id=categoryId的文章的数目
     * (用于删除分类时，判断某分类下是否有文章)
     */
    public Integer findNumByCategoryId(Integer categoryId);
    /**
     * 查询tag_article表中，tid=tagId的数目
     * (用于删除标签时，判断某标签下是否有文章)
     */
    public Integer findNumByTagId(Integer tagId);

    /**
     * 发表一篇文章
     * @param articleWithBLOBs
     * @return
     */
    public boolean addOneArticle(ArticleWithBLOBs articleWithBLOBs);

    /**
     * 删除一篇文章（删除时，同时要记得删除tag_article中aid=文章id的记录）
     * @param aid
     * @return
     */
    public void delOneArticle(Integer aid);

    /**
     * 更新一篇文章
     * @param articleWithBLOBs
     * @return
     */
    public boolean updateOneArticle(ArticleWithBLOBs articleWithBLOBs);

    /**
     * 查询一篇文章
     * @param aid
     * @return
     */
    public ArticleWithBLOBs findOneArticle(Integer aid);

    /**
     * 根据页数(page)和每页容量(limit)查询文章列表
     *
     * @param page
     * @param limit
     * @return
     */
    public List<Article> findArticlesByPageAndLimit(Integer page, Integer limit);

    /**
     * 发布一篇文章（发布的时候,还要更新tag,tag_article表）
     * @param article
     * @param tags
     */
    public void publishOneArticle(ArticleWithBLOBs article, List<Tag> tags);

    /**
     * 查询数据库中所有文章的个数
     * （用于分页插件计算一个有多少页）
     * @return
     */
    public int findAllNums();

    /**
     * 更新一篇文章（更新时还要更新tag,tag_article表）
     * @param article
     * @param tags
     */
    public void updateOneArticle(ArticleWithBLOBs article, List<Tag> tags);
}
